home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
fish
/
726-750
/
744
/
fo2
/
sources_fo2
/
memtodisk.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-18
|
2KB
|
105 lines
#include "defs.h"
Prototype MemToDisk();
MemToDisk()
{
WORD n,bitmap;
LONG offset,*adrB,*empty,ddrive,A;
BYTE *BuffT,write,length,val;
WORD c,Form;
struct DiskList *dlist=0;
struct RootNode *RN;
struct RootB *adr;
if (sourceDrive==destDrive)
{
putIText("Now insert dest disk ");
if (WaitChangeDisk(destDrive,-1)==2) return(2);
putIText("Thanck you ");
}
if (isInserted(destDrive))
{
putIText("YOU MUST insert DESTINATION disk ... ");
while (isInserted(destDrive)) Delay(10);
}
if (isProtected(destDrive))
{
while (isProtected(destDrive))
{
putIText("UnProtect DESTINATION disk ... ");
while (!isInserted(destDrive)) Delay(10);
while (isInserted(destDrive)) Delay(10);
}
}
putIText("Writing result to destination disk ");
offset=2*512L; /* Le boot Block est déja dans le Buffer de Track */
BuffT=BT;
/* On met à jour la date de dernière modif de la disquette */
dlist=whereB(880);
if (dlist==0) NotSet(880,8);
adr=dlist->dl_AdrB;
RN=(struct RootNode *)(DOSBase->dl_Root);
adr->Mday=RN->rn_Time.ds_Days;
adr->Mmin=RN->rn_Time.ds_Minute;
adr->Mtick=RN->rn_Time.ds_Tick;
length=adr->DiskName[0];
adr->DiskName[0]=length+1;
if (length<30) adr->DiskName[length+1]='.';
else {adr->DiskName[length]='.'; adr->DiskName[0]=length;}
bitmap=VarAdr->BitMap;
empty=VarAdr->Empty;
ddrive=destDrive;
A=('F'<<24|'B'<<16|'J'<<8|'.');
for (n=0;n<128;n++)
{
empty[n]=A;
}
/*printf("buffer a l' adresse %p\n",empty);*/
putchar(13);
Form=FORMAT;
/*printf("Form : %d, VarAdr->Format: %ld\n",Form,VarAdr->Format);*/
write=Form;
for (n=2;n<1761;n++)
{
val=HandleIDCMP2(FOWin);
if (val)
{
if (val==1) exit(0);
if (val==2) return(2);
}
if (offset==11*512)
{
/*printf("(n-12): %d\n",(n-11)); */
if (write) CMDonD(ddrive,TD_FORMAT,0,11*512L,BuffT,(n-11)*512L);
offset=0L;
if (!Form) write=0;
}
if (( n % 22 )==0) printCYL(n/22);
if (n==881) {adrB=BBM; write=1;}
else
{
dlist=whereB(n);
if (dlist==0) adrB=empty;
else
{
adrB=dlist->dl_AdrB;
if (FFS==0 || dlist->dl_Type!=8) BuildCheckSum(adrB);
write=1;
}
}
CopyMemQuick(adrB,BuffT+offset,512L);
offset+=512L;
}
return(0);
}